// 参考： https://www.jianshu.com/p/0f1b6ae1888c
// 参考： https://juejin.cn/post/6844904102053281806
// 定义了一个promise，用来模拟异步请求，作用是传入参数++
function getNum(num) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(num + 1);
    }, 1000);
  });
}

// 所需要执行的Generator函数，内部的数据在执行完成一步的promise之后，再调用下一步
var func = function* () {
  var f1 = yield getNum(1);
  var f2 = yield getNum(2);
  return 123
};


function asyncWrap(gFunc) {
  const gen = gFunc();
  function next() {
    const res = gen.next();
    if (res.done) {
      console.log('res.value-->>',res.value)
      return res.value;
    }
    // 此处的value 作为上一次的返回值
    res.value.then((value) => {
      next(value);
    });
  }
  next();
}

asyncWrap(func)

